package com.lekang.le.service;

import java.util.List;
import com.lekang.le.domain.OrderManagement;
import com.lekang.le.domain.OrderVO;
import com.lekang.le.domain.OrderCreateDTO;

/**
 * 订单管理Service接口
 * 
 * @author yyh
 * @date 2025-10-14
 */
public interface IOrderManagementService 
{
    /**
     * 查询订单管理
     * 
     * @param id 订单管理主键
     * @return 订单管理
     */
    public OrderManagement selectOrderManagementById(Long id);

    /**
     * 查询订单管理列表
     * 
     * @param orderManagement 订单管理
     * @return 订单管理集合
     */
    public List<OrderManagement> selectOrderManagementList(OrderManagement orderManagement);

    /**
     * 新增订单管理
     * 
     * @param orderManagement 订单管理
     * @return 结果
     */
    public int insertOrderManagement(OrderManagement orderManagement);

    /**
     * 修改订单管理
     * 
     * @param orderManagement 订单管理
     * @return 结果
     */
    public int updateOrderManagement(OrderManagement orderManagement);

    /**
     * 批量删除订单管理
     * 
     * @param ids 需要删除的订单管理主键集合
     * @return 结果
     */
    public int deleteOrderManagementByIds(Long[] ids);

    /**
     * 删除订单管理信息
     * 
     * @param id 订单管理主键
     * @return 结果
     */
    public int deleteOrderManagementById(Long id);

    /**
     * 查询当前用户的订单列表（小程序端使用）
     * 
     * @param userId 用户ID
     * @param orderStatus 订单状态（可选）
     * @return 订单VO列表
     */
    public List<OrderVO> selectMyOrders(Long userId, String orderStatus);

    /**
     * 取消订单（小程序端使用）
     * 
     * @param orderId 订单ID
     * @param cancelReason 取消原因
     * @return 结果
     */
    public int cancelOrder(Long orderId, String cancelReason);

    /**
     * 支付订单（小程序端使用）
     * 
     * @param orderId 订单ID
     * @return 结果
     */
    public int payOrder(Long orderId);

    /**
     * 根据订单ID查询订单详情（小程序端使用）
     * 
     * @param orderId 订单ID
     * @return 订单VO
     */
    public OrderVO selectOrderDetail(Long orderId);

    /**
     * 申请退款（小程序端使用）
     * 
     * @param orderId 订单ID
     * @param refundReason 退款原因
     * @return 结果
     */
    public int refundOrder(Long orderId, String refundReason);

    /**
     * 创建服务订单（小程序端使用）
     * 
     * @param dto 订单创建DTO
     * @return 订单信息（包含订单号、金额等）
     */
    public OrderManagement createServiceOrder(OrderCreateDTO dto);

    /**
     * 关闭超时未支付的订单（定时任务使用）
     * 查询所有状态为"待支付"且超过10分钟的订单，自动关闭
     * 
     * @return 关闭的订单数量
     */
    public int closeTimeoutOrders();
}
